package com.gonsin.ta.logic.parse.serialize;

import com.gonsin.ta.logic.parse.condition.FutureCondition;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 一次执行序列化的上下文
 * 用于存储 一次序列化过程中 上下文信息，包括必要的
 * 1、之前已经序列化过的对象
 */
public class SerializeContext {

    /**
     * 之前已经序列化完的对象
     */
    private Set<TaSerializable> serializedObjects = new HashSet<>();

    private Map<String, TaDeserializable> futureDeserializableMap = new HashMap<>();


    /**
     * 是否已经处理了某个对象，防止 递归循环造成 无限嵌套序列化
     * @param serializable
     * @return
     */
    public boolean hasHandle(TaSerializable serializable) {
        return serializedObjects.contains(serializable);
    }


    /**
     * 添加已处理
     */
    public void handle(TaSerializable serializable){
        this.serializedObjects.add(serializable);
    }

    public TaDeserializable getFutureDeserializable(String conditionId) {
        return futureDeserializableMap.get(conditionId);
    }

    /**
     * 序列化过程中产生的嵌套方法
     * @return
     */
    public Map<String, TaDeserializable> getFutureDeserializable() {
        return futureDeserializableMap;
    }

    /**
     * 序列化之后，用于存储一些循环的 condition
     * @param conditionId
     * @param taDeserializable
     */
    public void putFutureConditionSerial(String conditionId, TaDeserializable taDeserializable) {
        futureDeserializableMap.put(conditionId, taDeserializable);
    }
}
